local 天降辰星 = class()

function 天降辰星:初始化()
	self.活动开关 = false
	self.数据 = {}
	self.NPC = {
		{
			y = 141,
			地图 = 1001,
			模型 = "鼠先锋",
			名称 = "子鼠",
			方向 = 1,
			x = 67
		},
		{
			y = 214,
			地图 = 1001,
			模型 = "踏云兽",
			名称 = "丑牛",
			方向 = 1,
			x = 500
		},
		{
			y = 101,
			地图 = 1193,
			模型 = "噬天虎",
			名称 = "寅虎",
			方向 = 1,
			x = 17
		},
		{
			y = 12,
			地图 = 1193,
			模型 = "兔子怪",
			名称 = "卯兔",
			方向 = 1,
			x = 88
		},
		{
			y = 6,
			地图 = 1501,
			模型 = "蛟龙",
			名称 = "辰龙",
			方向 = 0,
			x = 27
		},
		{
			y = 120,
			地图 = 1501,
			模型 = "千年蛇魅",
			名称 = "巳蛇",
			方向 = 0,
			x = 260
		},
		{
			y = 22,
			地图 = 1506,
			模型 = "马面",
			名称 = "午马",
			方向 = 0,
			x = 60
		},
		{
			y = 64,
			地图 = 1514,
			模型 = "羊头怪",
			名称 = "未羊",
			方向 = 0,
			x = 75
		},
		{
			y = 12,
			地图 = 1514,
			模型 = "长眉灵猴",
			名称 = "申猴",
			方向 = 0,
			x = 125
		},
		{
			y = 24,
			地图 = 1173,
			模型 = "雷鸟人",
			名称 = "酉鸡",
			方向 = 2,
			x = 67
		},
		{
			y = 72,
			地图 = 1173,
			模型 = "哮天犬",
			名称 = "戌犬",
			方向 = 0,
			x = 291
		},
		{
			y = 81,
			地图 = 1173,
			模型 = "野猪",
			名称 = "亥猪",
			方向 = 0,
			x = 516
		}
	}
end

function 天降辰星:活动定时器()
	if self.活动开关 and self.开启Time - os.time() < 0 then
		self:关闭活动()
	end
end

function 天降辰星:开启活动()
	删除指定任务类型单位(1165)

	self.开启Time = os.time() + 5400

	for n = 1, 12 do
		local 任务id = 取唯一任务(1165)
		任务数据[任务id] = {
			类型 = 1165,
			结束 = 99999,
			任务显示 = true,
			销毁 = true,
			id = 任务id,
			起始 = os.time(),
			名称 = self.NPC[n].名称,
			模型 = self.NPC[n].模型,
			x = self.NPC[n].x,
			y = self.NPC[n].y,
			方向 = self.NPC[n].方向,
			地图编号 = self.NPC[n].地图,
			序列 = n,
			地图名称 = 取地图名称(self.NPC[n].地图)
		}

		地图处理类:添加单位(任务id)
	end

	广播消息({
		频道 = "xt",
		内容 = "#P/(天降辰星)#W活动已经开启，各位玩家可以前往#G游奕灵官(长安城,128,97)#W处领取任务吧#32"
	})
	发送公告("#P/(天降辰星)#W活动已经开启，各位玩家可以前往#G游奕灵官(长安城,128,97)#W处领取任务吧")

	self.活动开关 = true
end

function 天降辰星:关闭活动()
	self.数据 = {}
	self.活动开关 = false
	self.开启Time = nil

	删除指定任务类型单位(1165)
end

function 天降辰星:新增任务(id)
	if self.数据[id] == nil then
		self.数据[id] = {
			取消 = 0,
			环数 = 1,
			次数 = 1
		}
	else
		self.数据[id].次数 = 1
	end

	local FL = 1
	local 任务id, ZU = 取唯一任务(1166, id)
	任务数据[任务id] = {
		类型 = 1166,
		结束 = 2400,
		销毁 = true,
		领取人id = id,
		id = 任务id,
		玩家id = id,
		DWZ = ZU,
		起始 = os.time(),
		队伍组 = {},
		分类 = FL,
		名称 = self.NPC[FL].名称
	}
	local 队伍id = 玩家数据[id].队伍

	for n = 1, #队伍数据[队伍id].成员数据 do
		if 队伍处理类:取是否助战(玩家数据[id].队伍, n) == 0 then
			local cyid = 队伍数据[队伍id].成员数据[n]

			if self.数据[cyid] == nil then
				self.数据[cyid] = {
					取消 = 0,
					环数 = 1,
					次数 = 1
				}
			else
				self.数据[cyid].次数 = 1
			end

			发送数据(玩家数据[cyid].连接id, 1501, {
				名称 = "游奕灵官",
				模型 = "天兵",
				对话 = format("鼠，耗虫也，于是夜尚未央，正鼠得令之候，故子属鼠。前往挑战子鼠分影。")
			})
			玩家数据[cyid].角色:添加任务(任务id)
		end
	end
end

function 天降辰星:任务说明(玩家id, 任务id)
	local 名称 = "天降辰星"
	local 说明 = ""
	local 备注 = "日常活动 天降辰星"

	if not self.活动开关 then
		说明 = format("活动已经结束。")

		return {
			名称,
			说明,
			备注
		}
	end

	local 环数 = self.数据[玩家id].环数
	local 次数 = self.数据[玩家id].次数
	local NPC = 取NPC寻路信息(self.NPC[次数].地图, self.NPC[次数].名称, self.NPC[次数].x, self.NPC[次数].y)

	if 次数 == 1 then
		说明 = format("#P子鼠分影#W降人间，速去前往#Y长安城#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 67, 141, 环数, 次数)
	elseif 次数 == 2 then
		说明 = format("#P丑牛分影#W降人间，速去前往#Y长安城#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 500, 214, 环数, 次数)
	elseif 次数 == 3 then
		说明 = format("#P寅虎分影#W降人间，速去前往#Y江南野外#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 17, 101, 环数, 次数)
	elseif 次数 == 4 then
		说明 = format("#P卯兔分影#W降人间，速去前往#Y江南野外#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 134, 20, 环数, 次数)
	elseif 次数 == 5 then
		说明 = format("#P辰龙分影#W降人间，速去前往#Y建邺城#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 27, 6, 环数, 次数)
	elseif 次数 == 6 then
		说明 = format("#P巳蛇分影#W降人间，速去前往#Y建邺城#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 260, 120, 环数, 次数)
	elseif 次数 == 7 then
		说明 = format("#P午马分影#W降人间，速去前往#Y东海湾#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 60, 22, 环数, 次数)
	elseif 次数 == 8 then
		说明 = format("#P未羊分影#W降人间，速去前往#Y花果山#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 75, 64, 环数, 次数)
	elseif 次数 == 9 then
		说明 = format("#P申猴分影#W降人间，速去前往#Y花果山#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 125, 12, 环数, 次数)
	elseif 次数 == 10 then
		说明 = format("#P酉鸡分影#W降人间，速去前往#Y大唐境外#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 67, 24, 环数, 次数)
	elseif 次数 == 11 then
		说明 = format("#P戌犬分影#W降人间，速去前往#Y大唐境外#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 291, 72, 环数, 次数)
	elseif 次数 == 12 then
		说明 = format("#P亥猪分影#W降人间，速去前往#Y大唐境外#W挑战" .. "#Y%s#R(%s,%s)" .. "#W！剩余时间" .. 取分(任务数据[任务id].结束 - (os.time() - 任务数据[任务id].起始)) .. "分钟。当前第#S%s#W轮第#G%s#W环。", NPC, 516, 81, 环数, 次数)
	end

	return {
		名称,
		说明,
		备注
	}
end

function 天降辰星:对话处理(id, 名称, 事件)
	if 事件 == "我欲前往收服十二元辰" then
		if not self.活动开关 then
			添加最后对话(id, "当前不是活动时间~")

			return
		elseif 玩家数据[id].队伍 == 0 or 取队伍人数(id) < 3 or 取队伍最低等级(玩家数据[id].队伍, 40) then
			添加最后对话(id, "天降辰星参与条件：≥40级，≥3人")

			return
		elseif 玩家数据[id].队长 == false then
			添加最后对话(id, "这种重要的事情还是让队长来吧！")

			return
		end

		local go = true
		local 队伍id = 玩家数据[id].队伍

		for n = 1, #队伍数据[队伍id].成员数据 do
			local cyid = 队伍数据[队伍id].成员数据[n]

			if self.数据[cyid] and os.time() < self.数据[cyid].取消 then
				添加最后对话(id, 玩家数据[cyid].角色.数据.名称 .. "在五分钟内取消过任务，需等待五分钟后才可以继续任务哦。")

				if cyid ~= id then
					添加最后对话(cyid, "取消任务后，需等待5分钟后才可以继续领取。")
				end

				return
			end

			if 玩家数据[cyid].角色:取任务(1166) ~= 0 then
				常规提示(cyid, "你已经有了一个这样的任务了！")

				if cyid ~= id then
					添加最后对话(id, 玩家数据[cyid].角色.数据.名称 .. "已经领取过任务了")
				end

				go = false

				break
			end
		end

		if go then
			self:新增任务(id)
		end
	elseif 事件 == "此行甚是疲惫，我想取消任务" then
		local 任务id = 玩家数据[id].角色:取任务(1166)

		if 任务id ~= 0 then
			玩家数据[id].角色:取消任务(任务id)

			if self.活动开关 then
				if self.数据[id] == nil then
					self.数据[id] = {
						取消 = 0,
						环数 = 1,
						次数 = 0
					}
				end

				self.数据[id].取消 = os.time() + 300
			end

			添加最后对话(id, "已成功取消，并清空任务次数。5分钟可再次领取。")
		else
			添加最后对话(id, "你没有这样的任务哦。")
		end
	elseif 事件 == "待我一战！" then
		if 玩家数据[id].队伍 == 0 or 取队伍人数(id) < 3 or 取队伍最低等级(玩家数据[id].队伍, 40) then
			添加最后对话(id, "天降辰星参与条件：≥40级，≥3人")

			return
		end

		local 任务id = 玩家数据[id].角色:取任务(1166)

		if 任务id ~= 0 then
			if 任务数据[任务id].名称 == 名称 then
				if 名称 == "子鼠" then
					战斗准备类:创建战斗(id + 0, 130041, 玩家数据[id].地图单位.标识)
				elseif 名称 == "丑牛" then
					战斗准备类:创建战斗(id + 0, 130042, 玩家数据[id].地图单位.标识)
				elseif 名称 == "寅虎" then
					战斗准备类:创建战斗(id + 0, 130043, 玩家数据[id].地图单位.标识)
				elseif 名称 == "卯兔" then
					战斗准备类:创建战斗(id + 0, 130044, 玩家数据[id].地图单位.标识)
				elseif 名称 == "辰龙" then
					战斗准备类:创建战斗(id + 0, 130045, 玩家数据[id].地图单位.标识)
				elseif 名称 == "巳蛇" then
					战斗准备类:创建战斗(id + 0, 130046, 玩家数据[id].地图单位.标识)
				elseif 名称 == "午马" then
					战斗准备类:创建战斗(id + 0, 130047, 玩家数据[id].地图单位.标识)
				elseif 名称 == "未羊" then
					战斗准备类:创建战斗(id + 0, 130048, 玩家数据[id].地图单位.标识)
				elseif 名称 == "申猴" then
					战斗准备类:创建战斗(id + 0, 130049, 玩家数据[id].地图单位.标识)
				elseif 名称 == "酉鸡" then
					战斗准备类:创建战斗(id + 0, 130050, 玩家数据[id].地图单位.标识)
				elseif 名称 == "戌犬" then
					战斗准备类:创建战斗(id + 0, 130051, 玩家数据[id].地图单位.标识)
				elseif 名称 == "亥猪" then
					战斗准备类:创建战斗(id + 0, 130052, 玩家数据[id].地图单位.标识)
				end
			else
				添加最后对话(id, "小侠客，你当前应该挑战的是" .. 任务数据[任务id].名称 .. "才对哦。")
			end
		else
			添加最后对话(id, "小侠客，想挑战我的分影化身吗？不过得先去找游奕灵官(长安城128,97)领取天降辰星任务才可以哦。")
		end
	end
end

function 天降辰星:对话内容(id, 标识)
	local 对话数据 = {
		模型 = 任务数据[标识].模型,
		名称 = 任务数据[标识].名称,
		对话 = "小侠客，准备好了就来挑战我的分影化身吧",
		选项 = {
			"待我一战！",
			"路过。"
		}
	}

	return 对话数据
end

function 天降辰星:刷新任务(id, FL)
	local 任务id = 玩家数据[id].角色:取任务(1166)

	if 任务id ~= 0 then
		if FL == 1 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "游奕灵官",
				模型 = "天兵",
				对话 = format("鼠，耗虫也，于是夜尚未央，正鼠得令之候，故子属鼠。前往挑战子鼠分影。")
			})
		elseif FL == 2 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "子鼠",
				模型 = "鼠先锋",
				对话 = format("地辟于丑，而牛则开地之物也，故丑属牛。前往挑战丑牛分影。")
			})
		elseif FL == 3 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "丑牛",
				模型 = "踏云兽",
				对话 = format("人生于寅，有生则有杀，杀人者，虎也，又寅者，畏也。可畏莫如虎，故寅属虎。前往挑战寅虎分影。")
			})
		elseif FL == 4 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "寅虎",
				模型 = "噬天虎",
				对话 = format("卯者，日出之候。日本离体，而中含太阴玉兔之精，故卯属兔。前往挑战卯兔分影。")
			})
		elseif FL == 5 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "卯兔",
				模型 = "兔子怪",
				对话 = format("辰者，三月之卦，正群龙行雨之时，故辰属龙。前往挑战辰龙分影。")
			})
		elseif FL == 6 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "辰龙",
				模型 = "蛟龙",
				对话 = format("巳者，四月之卦，于时草茂，而蛇得其所。又，巳时蛇不上道，故属蛇。前往挑战巳蛇分影。")
			})
		elseif FL == 7 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "巳蛇",
				模型 = "千年蛇魅",
				对话 = format("午者，阳极而一阴甫生。马者，而健而不离地，阴类也，故午属马。前往挑战午马分影。")
			})
		elseif FL == 8 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "午马",
				模型 = "马面",
				对话 = format("养啮未时之草茁，故未属羊。前往挑战未羊分影。")
			})
		elseif FL == 9 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "未羊",
				模型 = "羊头怪",
				对话 = format("申时，日落而猿啼，且伸臂也，臂之气数，将乱则狂作横行，故申属猴。前往挑战申猴分影。")
			})
		elseif FL == 10 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "申猴",
				模型 = "长眉灵猴",
				对话 = format("酉者，月出之时，月本坎体，而中含太阳金鸡之精，故酉属鸡。前往挑战酉鸡分影。")
			})
		elseif FL == 11 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "酉鸡",
				模型 = "雷鸟人",
				对话 = format("戌时，忠犬出没。前往挑战戌犬分影。")
			})
		elseif FL == 12 then
			发送数据(玩家数据[id].连接id, 1501, {
				名称 = "戌犬",
				模型 = "哮天犬",
				对话 = format("亥时，猪则饮食之外无一所知，故亥属猪。前往挑战亥猪分影。")
			})
		end

		任务数据[任务id].名称 = self.NPC[FL].名称
		任务数据[任务id].起始 = os.time()

		玩家数据[id].角色:刷新任务跟踪()
	end
end

function 天降辰星:增加任务次数(id)
	if self.活动开关 then
		if self.数据[id] == nil then
			self.数据[id] = {
				取消 = 0,
				环数 = 1,
				次数 = 0
			}
		end

		self.数据[id].次数 = self.数据[id].次数 + 1
	end
end

function 天降辰星:战斗胜利处理(id组, 战斗类型)
	local id = id组[1]
	local 次数 = self.数据[id].次数 + 0

	self:增加任务次数(id)

	for n = 1, #id组 do
		local cyid = id组[n]

		if 队伍处理类:取是否助战(玩家数据[id].队伍, n) == 0 and self.活动开关 and self.数据[cyid] then
			if cyid ~= id and self.数据[cyid].次数 ~= self.数据[id].次数 - 1 then
				return
			end

			self.数据[cyid].次数 = self.数据[id].次数

			if self.数据[cyid].次数 > 12 then
				self.数据[cyid].环数 = self.数据[cyid].环数 + 1

				玩家数据[cyid].角色:取消任务(玩家数据[cyid].角色:取任务(1166))
				发送数据(玩家数据[cyid].连接id, 1501, {
					名称 = "游奕灵官",
					模型 = "天兵",
					对话 = format("果然身手不错！此番十二元辰挑战你已经全部完成，回去找到游奕灵官（长安城，128，97）继续新的挑战吧！#81")
				})
			else
				self:刷新任务(cyid, self.数据[cyid].次数)
			end

			通用给奖励(cyid, {
				经验 = {
					2500 + 次数 * 200,
					3000 + 次数 * 200
				},
				银子 = {
					1500 + 次数 * 150,
					1800 + 次数 * 150
				}
			}, "天降星辰", nil, self.NPC[次数].名称)
		end
	end
end

return 天降辰星
